package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

/*
1、读取文件的内容并显示在终端（带缓冲区的方式），使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法

*/
func main() {
	file, err := os.Open("src/go_code/chapter14/2打开关闭文件/生日.txt")
	if err != nil {
		fmt.Println("open file err=", err)
	}
	//当函数退出时，要及时的关闭file
	defer file.Close() //要及时关闭file句柄，否则会有内存泄露
	//创建一个*Reader ，是带缓冲的
	/*
		const{
			defaultBufSize=4096//默认的缓冲区为4096
		}
	*/
	reader := bufio.NewReader(file)
	//循环的读取文件的内容
	/*
		func (b *Reader) ReadString(delim byte) (line string, err error)
		ReadBytes读取直到第一次遇到delim字节，返回一个包含已读取的数据和delim字节的切片。
		如果ReadBytes方法在读取到delim之前遇到了错误，它会返回在错误之前读取的数据以及该错误（一般是io.EOF）。
		当且仅当ReadBytes方法返回的切片不以delim结尾时，会返回一个非nil的错误。
	*/
	for {
		str, err := reader.ReadString('\n') //读到一个换行就结束
		if err == io.EOF {
			break
		}
		//输出内容
		fmt.Print(str)
	}
	fmt.Println("读取结束")
}
